package com.itheima.controller;

import com.itheima.pojo.Article;
import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.ArticleService;
import com.itheima.utils.JwtUtil;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping(value = "/article")
public class ArticleController {
    @Autowired
    private ArticleService articleService;

    //添加文章
    @PostMapping
    public Result add(@RequestBody @Validated Article article){
        articleService.add(article);
        return Result.success();
    }

    //查询文章列表
    /**
     * 获取文章列表
     *
     * 该方法通过GET请求获取文章列表，支持分页和条件过滤
     * 可以根据页面号、页面大小、文章状态和类别ID来筛选文章
     *
     * @param pageNum 页面号，用于指定从哪一页开始获取数据
     * @param pageSize 页面大小，用于指定每页包含的文章数量
     * @param state 文章状态，可选参数，用于筛选特定状态的文章，如果未提供则不进行状态筛选
     * @param categoryId 类别ID，可选参数，用于筛选属于特定类别的文章，如果未提供则不进行类别筛选
     * @return 返回一个Result对象，包含一个PageBean对象，该对象中包含分页后的文章列表
     */
    @GetMapping
    public Result<PageBean<Article>> list(
            Integer pageNum,
            Integer pageSize,
            @RequestParam(required = false) String state,
            @RequestParam(required = false) Integer categoryId
    ){
        // 调用文章服务的列表方法获取分页后的文章列表
        PageBean<Article> pb = articleService.list(pageNum,pageSize,state,categoryId);
        // 返回成功结果，包含获取到的文章列表页豆
        return Result.success(pb);
    }

    //更新文章
    @PutMapping
    public Result put(@RequestBody @Validated(Article.Put.class) Article article) {
        articleService.put(article);
        return Result.success();
    }

    //获取文章详情
    @GetMapping("/detail")
    public Result get( @RequestParam Integer id){
        Article article = articleService.get(id);
        return Result.success(article);
    }

    //删除文章
    @DeleteMapping
    public Result delete( @RequestParam Integer id){
        articleService.delete(id);
        return Result.success();
    }
}
